//// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
//
Shader "custom/Standard-New-NormalEdge"
{
//	Properties
//	{
//		_EdgeColor("EdgeColor", Color) = (1,1,1,1)
//		_Color("Color", Color) = (1,1,1,1)
//		_MainTex("Albedo", 2D) = "white" {}
//		
//		_Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
//
//		_Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5
//		_GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0
//		[Enum(Metallic Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel ("Smoothness texture channel", Float) = 0
//
//		[Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0
//		_MetallicGlossMap("Metallic", 2D) = "white" {}
//
//		[ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
//		[ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0
//
//		_BumpScale("Scale", Float) = 1.0
//		_BumpMap("Normal Map", 2D) = "bump" {}
//
//		_Parallax ("Height Scale", Range (0.005, 0.08)) = 0.02
//		_ParallaxMap ("Height Map", 2D) = "black" {}
//
//		_OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
//		_OcclusionMap("Occlusion", 2D) = "white" {}
//
//		_EmissionColor("Color", Color) = (0,0,0)
//		_EmissionMap("Emission", 2D) = "white" {}
//		
//		_DetailMask("Detail Mask", 2D) = "white" {}
//
//		_DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {}
//		_DetailNormalMapScale("Scale", Float) = 1.0
//		_DetailNormalMap("Normal Map", 2D) = "bump" {}
//
//		[Enum(UV0,0,UV1,1)] _UVSec ("UV Set for secondary textures", Float) = 0
//
//
//		// Blending state
//		[HideInInspector] _Mode ("__mode", Float) = 0.0
//		[HideInInspector] _SrcBlend ("__src", Float) = 1.0
//		[HideInInspector] _DstBlend ("__dst", Float) = 0.0
//		[HideInInspector] _ZWrite ("__zw", Float) = 1.0
//		[Enum(Off,0,Front,1,Back,2)] _Cull ("Cull", Float) = 2
//	}
//
//	CGINCLUDE
//		#define UNITY_SETUP_BRDF_INPUT MetallicSetup
//	ENDCG
//
//	SubShader
//	{
//		Tags { "RenderType"="Opaque" "PerformanceChecks"="False" }
//		LOD 300
//	
//
//		// ------------------------------------------------------------------
//		//  Base forward pass (directional light, emission, lightmaps, ...)
//		Pass
//		{
//			Name "FORWARD" 
//			Tags { "LightMode" = "ForwardBase" }
//
//			Blend [_SrcBlend] [_DstBlend]
//			ZWrite [_ZWrite]
//			Cull [_Cull]
//
//			CGPROGRAM
//			#pragma target 3.0
//
//			// -------------------------------------
//
//			#pragma shader_feature _NORMALMAP
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _EMISSION
//			#pragma shader_feature _METALLICGLOSSMAP
//			#pragma shader_feature ___ _DETAIL_MULX2
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
//			#pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
//			#pragma shader_feature _PARALLAXMAP
//
//			#pragma multi_compile_fwdbase
//			#pragma multi_compile_fog
//			#pragma multi_compile_instancing
//
//			#pragma vertex vertBase
//			#pragma fragment fragBase
//
//			fixed4 _EdgeColor;
//
//			#if defined(UNITY_NO_FULL_STANDARD_SHADER)
//			#   define UNITY_STANDARD_SIMPLE 1
//			#endif
//
//			#if UNITY_STANDARD_SIMPLE
//		    	#include "UnityStandardCoreForwardSimple.cginc"
//			    VertexOutputBaseSimple vertBase (VertexInput v) { return vertForwardBaseSimple(v); }
//			    VertexOutputForwardAddSimple vertAdd (VertexInput v) { return vertForwardAddSimple(v); }
//			    half4 fragBase (VertexOutputBaseSimple i) : SV_Target
//			    {
//					FragmentCommonData s = FragmentSetupSimple(i);
//
//				    UnityLight mainLight = MainLightSimple(i, s);
//
//				    #if !defined(LIGHTMAP_ON) && defined(_NORMALMAP)
//				    half ndotl = saturate(dot(s.tangentSpaceNormal, i.tangentSpaceLightDir));
//				    #else
//				    half ndotl = saturate(dot(s.normalWorld, mainLight.dir));
//				    #endif
//
//				    //we can't have worldpos here (not enough interpolator on SM 2.0) so no shadow fade in that case.
//				    half shadowMaskAttenuation = UnitySampleBakedOcclusion(i.ambientOrLightmapUV, 0);
//				    half realtimeShadowAttenuation = SHADOW_ATTENUATION(i);
//				    half atten = UnityMixRealtimeAndBakedShadows(realtimeShadowAttenuation, shadowMaskAttenuation, 0);
//
//				    half occlusion = Occlusion(i.tex.xy);
//				    half rl = dot(REFLECTVEC_FOR_SPECULAR(i, s), LightDirForSpecular(i, mainLight));
//
//				    UnityGI gi = FragmentGI (s, occlusion, i.ambientOrLightmapUV, atten, mainLight);
//				    half3 attenuatedLightColor = gi.light.color * ndotl;
//
//				    half3 c = BRDF3_Indirect(s.diffColor, s.specColor, gi.indirect, PerVertexGrazingTerm(i, s), PerVertexFresnelTerm(i));
//				    c += BRDF3DirectSimple(s.diffColor, s.specColor, s.smoothness, rl) * attenuatedLightColor;
//				    c += Emission(i.tex.xy);
//
//				    UNITY_APPLY_FOG(i.fogCoord, c);
//
//				    return OutputForward (half4(c, 1), s.alpha);
//			    }
//			    half4 fragAdd (VertexOutputForwardAddSimple i) : SV_Target { return fragForwardAddSimpleInternal(i); }
//			#else
//			    #include "UnityStandardCore.cginc"
//			    VertexOutputForwardBase vertBase (VertexInput v) { return vertForwardBase(v); }
//			    VertexOutputForwardAdd vertAdd (VertexInput v) { return vertForwardAdd(v); }
//			    half4 fragBase (VertexOutputForwardBase i) : SV_Target
//			    {
//					FRAGMENT_SETUP(s)
//
//				    UNITY_SETUP_INSTANCE_ID(i);
//				    UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
//
//				    UnityLight mainLight = MainLight ();
//				    UNITY_LIGHT_ATTENUATION(atten, i, s.posWorld);
//
//				    half occlusion = Occlusion(i.tex.xy);
//				    UnityGI gi = FragmentGI (s, occlusion, i.ambientOrLightmapUV, atten, mainLight);
//
//				    half4 c = UNITY_BRDF_PBS (s.diffColor, s.specColor, s.oneMinusReflectivity, s.smoothness, s.normalWorld, -s.eyeVec, gi.light, gi.indirect);
//				    c.rgb += Emission(i.tex.xy);
//
//				    UNITY_APPLY_FOG(i.fogCoord, c.rgb);
//
//				    half4 retColor = OutputForward (c, s.alpha);
//
//					half eyeNormalDot = abs(dot(s.normalWorld, s.eyeVec));
//					eyeNormalDot = clamp(eyeNormalDot / 0.5, 0, 1);
//
//					retColor.rgb = eyeNormalDot * retColor.rgb + (1 - eyeNormalDot) * _EdgeColor.rgb;
//				    return retColor;
//			    }
//			    half4 fragAdd (VertexOutputForwardAdd i) : SV_Target { return fragForwardAddInternal(i); }
//			#endif
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		//  Additive forward pass (one light per pass)
//		Pass
//		{
//			Name "FORWARD_DELTA"
//			Tags { "LightMode" = "ForwardAdd" }
//			Blend [_SrcBlend] One
//			Fog { Color (0,0,0,0) } // in additive pass fog should be black
//			ZWrite Off
//			ZTest LEqual
//
//			CGPROGRAM
//			#pragma target 3.0
//
//			// -------------------------------------
//
//
//			#pragma shader_feature _NORMALMAP
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _METALLICGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
//			#pragma shader_feature ___ _DETAIL_MULX2
//			#pragma shader_feature _PARALLAXMAP
//
//			#pragma multi_compile_fwdadd_fullshadows
//			#pragma multi_compile_fog
//
//			#pragma vertex vertAdd
//			#pragma fragment fragAdd
//			#include "UnityStandardCoreForward.cginc"
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		//  Shadow rendering pass
//		Pass {
//			Name "ShadowCaster"
//			Tags { "LightMode" = "ShadowCaster" }
//
//			ZWrite On ZTest LEqual
//
//			CGPROGRAM
//			#pragma target 3.0
//
//			// -------------------------------------
//
//
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _METALLICGLOSSMAP
//			#pragma shader_feature _PARALLAXMAP
//			#pragma multi_compile_shadowcaster
//			#pragma multi_compile_instancing
//
//			#pragma vertex vertShadowCaster
//			#pragma fragment fragShadowCaster
//
//			#include "UnityStandardShadow.cginc"
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		//  Deferred pass
//		Pass
//		{
//			Name "DEFERRED"
//			Tags { "LightMode" = "Deferred" }
//
//			CGPROGRAM
//			#pragma target 3.0
//			#pragma exclude_renderers nomrt
//
//
//			// -------------------------------------
//
//			#pragma shader_feature _NORMALMAP
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _EMISSION
//			#pragma shader_feature _METALLICGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
//			#pragma shader_feature ___ _DETAIL_MULX2
//			#pragma shader_feature _PARALLAXMAP
//
//			#pragma multi_compile_prepassfinal
//			#pragma multi_compile_instancing
//
//			#pragma vertex vertDeferred
//			#pragma fragment fragDeferred
//
//			#include "UnityStandardCore.cginc"
//
//			ENDCG
//		}
//
//		// ------------------------------------------------------------------
//		// Extracts information for lightmapping, GI (emission, albedo, ...)
//		// This pass it not used during regular rendering.
//		Pass
//		{
//			Name "META" 
//			Tags { "LightMode"="Meta" }
//
//			Cull Off
//
//			CGPROGRAM
//			#pragma vertex vert_meta
//			#pragma fragment frag_meta
//
//			#pragma shader_feature _EMISSION
//			#pragma shader_feature _METALLICGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature ___ _DETAIL_MULX2
//			#pragma shader_feature EDITOR_VISUALIZATION
//
//			#include "UnityStandardMeta.cginc"
//			ENDCG
//		}
//	}
//
//	SubShader
//	{
//		Tags { "RenderType"="Opaque" "PerformanceChecks"="False" }
//		LOD 150
//
//		// ------------------------------------------------------------------
//		//  Base forward pass (directional light, emission, lightmaps, ...)
//		Pass
//		{
//			Name "FORWARD" 
//			Tags { "LightMode" = "ForwardBase" }
//
//			Blend [_SrcBlend] [_DstBlend]
//			ZWrite [_ZWrite]
//			Cull [_Cull]
//
//			CGPROGRAM
//			#pragma target 2.0
//			
//			#pragma shader_feature _NORMALMAP
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _EMISSION 
//			#pragma shader_feature _METALLICGLOSSMAP 
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
//			#pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
//			// SM2.0: NOT SUPPORTED shader_feature ___ _DETAIL_MULX2
//			// SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
//
//			#pragma skip_variants SHADOWS_SOFT DIRLIGHTMAP_COMBINED
//
//			#pragma multi_compile_fwdbase
//			#pragma multi_compile_fog
//
//			#pragma vertex vertBase
//			#pragma fragment fragBase
//			#include "UnityStandardCoreForward.cginc"
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		//  Additive forward pass (one light per pass)
//		Pass
//		{
//			Name "FORWARD_DELTA"
//			Tags { "LightMode" = "ForwardAdd" }
//			Blend [_SrcBlend] One
//			Fog { Color (0,0,0,0) } // in additive pass fog should be black
//			ZWrite Off
//			ZTest LEqual
//			
//			CGPROGRAM
//			#pragma target 2.0
//
//			#pragma shader_feature _NORMALMAP
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _METALLICGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
//			#pragma shader_feature ___ _DETAIL_MULX2
//			// SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
//			#pragma skip_variants SHADOWS_SOFT
//			
//			#pragma multi_compile_fwdadd_fullshadows
//			#pragma multi_compile_fog
//			
//			#pragma vertex vertAdd
//			#pragma fragment fragAdd
//			#include "UnityStandardCoreForward.cginc"
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		//  Shadow rendering pass
//		Pass {
//			Name "ShadowCaster"
//			Tags { "LightMode" = "ShadowCaster" }
//			
//			ZWrite On ZTest LEqual
//
//			CGPROGRAM
//			#pragma target 2.0
//
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _METALLICGLOSSMAP
//			#pragma skip_variants SHADOWS_SOFT
//			#pragma multi_compile_shadowcaster
//
//			#pragma vertex vertShadowCaster
//			#pragma fragment fragShadowCaster
//
//			#include "UnityStandardShadow.cginc"
//
//			ENDCG
//		}
//
//		// ------------------------------------------------------------------
//		// Extracts information for lightmapping, GI (emission, albedo, ...)
//		// This pass it not used during regular rendering.
//		Pass
//		{
//			Name "META" 
//			Tags { "LightMode"="Meta" }
//
//			Cull Off
//
//			CGPROGRAM
//			#pragma vertex vert_meta
//			#pragma fragment frag_meta
//
//			#pragma shader_feature _EMISSION
//			#pragma shader_feature _METALLICGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature ___ _DETAIL_MULX2
//			#pragma shader_feature EDITOR_VISUALIZATION
//
//			#include "UnityStandardMeta.cginc"
//			ENDCG
//		}
//	}
//
//
//	FallBack "VertexLit"
//	CustomEditor "NewStandardShaderGUI"
}
